package com.imcoke.abchat.common.utils;

import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date;

/**
 * @Author ccoke
 * @Description 验证表单
 * @Date: 19:58 2017-11-27
 */
@Component
public class FormValidationUtil {
    //通过反射判断对象的属性值是否少完整
    public Boolean checkForm(Object object) throws Exception {
        Class<?> clz = object.getClass();
        //获取所有属性
        Field[] fields = clz.getDeclaredFields();
        for (Field field : fields) {
            //是否为String类型
            if (field.getGenericType().toString().equals("class java.lang.String")){
                Method m = (Method) object.getClass().getMethod(
                        "get" + getMethodName(field.getName()));
                String value = (String) m.invoke(object);
                if (value == null){
                    return false;
                }
            }
            // 如果类型是Integer
            if (field.getGenericType().toString().equals(
                    "class java.lang.Integer")) {
                Method m = (Method) object.getClass().getMethod(
                        "get" + getMethodName(field.getName()));
                Integer value = (Integer) m.invoke(object);
                if (value == null){
                    return false;
                }
            }

            // 如果类型是Double
            if (field.getGenericType().toString().equals(
                    "class java.lang.Double")) {
                Method m = (Method) object.getClass().getMethod(
                        "get" + getMethodName(field.getName()));
                Double value = (Double) m.invoke(object);
                if (value == null){
                    return false;
                }

            }

            // 如果类型是Boolean 是封装类
            if (field.getGenericType().toString().equals(
                    "class java.lang.Boolean")) {
                Method m = (Method) object.getClass().getMethod(
                        field.getName());
                Boolean value = (Boolean) m.invoke(object);
                if (value == null){
                    return false;
                }

            }

            // 如果类型是Date
            if (field.getGenericType().toString().equals(
                    "class java.util.Date")) {
                Method m = (Method) object.getClass().getMethod(
                        "get" + getMethodName(field.getName()));
                Date value = (Date) m.invoke(object);
                if (value == null){
                    return false;
                }
            }
            // 如果类型是Short
            if (field.getGenericType().toString().equals(
                    "class java.lang.Short")) {
                Method m = (Method) object.getClass().getMethod(
                        "get" + getMethodName(field.getName()));
                Short value = (Short) m.invoke(object);
                if (value == null){
                    return false;
                }
            }
        }
        return true;
    }

    // 把一个字符串的第一个字母大写
    private static String getMethodName(String fildeName) throws Exception{
        byte[] items = fildeName.getBytes();
        items[0] = (byte) ((char) items[0] - 'a' + 'A');
        return new String(items);
    }
}
